﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using MySql.Data;
using MySql.Data.MySqlClient;

namespace DAL
{
    /**
     * 
     * DataProvider lié aux Catégories
     * 
     **/
    public class CategoryDataProvider : BaseDataProvider
    {
        private string table = "category"; // nom de la table
        private string id = "id_category"; // nom de la clé primaire

        public override string getTable()
        {
            return this.table;
        }

        public override string getId()
        {
            return this.id;
        }

        /**
         * 
         * Récupère toutes les catégories et leurs produits
         * 
         **/
        public DataSet findAllAndProducts()
        {
            DataSet ds = new DataSet();

            using (MySqlConnection conn = new MySqlConnection(this.connString))
            {
                conn.Open();
                MySqlDataAdapter adpt = new MySqlDataAdapter();
                adpt.SelectCommand = new MySqlCommand("SELECT * FROM " + getTable(), conn);
                adpt.Fill(ds, "Catégories");

                adpt.SelectCommand = new MySqlCommand("SELECT * FROM product", conn);
                adpt.Fill(ds, "Produits");
            }

            ds.Relations.Add("ProduitsCatégories", ds.Tables["Catégories"].Columns["id_category"], ds.Tables["Produits"].Columns["category_id_category"]); // crée une relation JOIN

            return ds;
        }


        /**
         * 
         * Sauvegarde une catégorie.
         * 
         **/
        public bool save(DataTable dataDT)
        {
            using (MySqlConnection conn = new MySqlConnection(this.connString))
            {
                conn.Open();

                DataRow row = dataDT.Rows[0];
                MySqlCommand cmd = null;

                if (row["id"].Equals(0)) // si l'id est null, c'est une nouvelle catégorie
                {
                    cmd = new MySqlCommand("INSERT INTO " + getTable() + "(name, description) VALUES(@name, @description)", conn);
                }
                else // sinon, c'est une mise à jour
                {
                    cmd = new MySqlCommand("UPDATE " + getTable() + " SET name = @name, description = @description WHERE " + getId() + " = @id", conn);
                    cmd.Parameters.AddWithValue("@id", row["id"]);
                }

                cmd.Parameters.AddWithValue("@name", row["name"]);
                cmd.Parameters.AddWithValue("@description", row["description"]);

                cmd.ExecuteNonQuery();
            }
            return true;
        }
    }
}
